This version uses the sample number and barcode ID to choose human cells from an initial clustering of all data to the mixed human/mouse reference genomes. With this vector of IDs, a python script finds corresponding fastq read identifiers (since only the bam file contains “corrected” barcodes). The script then iterates through the paired fastq file, partitioning the matching (human) and non-matching (mouse) reads to separate fastq pairs. These are then run though cellranger count using only the appropriate genomes.
Load human genome split of samples, labeling with hs1..hs4. Output matrix.
Convert to common mouse genes. Re-load into object. Load mouse genome split of samples, labeling with ms1..ms4. Subset overlapping genes. Merge all 8. Normalize and scale. Show clusters labeled by cell; split by sample. Show nCount_RNA also. Determine significantly-different list mouse vs human.
hs1.data=Read10X(data.dir="./hg19/S1/outs/filtered_feature_bc_matrix/")
hs2.data=Read10X(data.dir="./hg19/S2/outs/filtered_feature_bc_matrix/")
hs3.data=Read10X(data.dir="./hg19/S3/outs/filtered_feature_bc_matrix/")
hs4.data=Read10X(data.dir="./hg19/S4/outs/filtered_feature_bc_matrix/")
ms1.data=Read10X(data.dir="./mm10/S1/outs/filtered_feature_bc_matrix/")
ms2.data=Read10X(data.dir="./mm10/S2/outs/filtered_feature_bc_matrix/")
ms3.data=Read10X(data.dir="./mm10/S3/outs/filtered_feature_bc_matrix/")
ms4.data=Read10X(data.dir="./mm10/S4/outs/filtered_feature_bc_matrix/")
#some human gene symbols have underscores (but these are not in geneTrans).
#Substitute a dot so as not to raise an error.
rownames(hs1.data)=gsub("_",".",rownames(hs1.data))
rownames(hs2.data)=gsub("_",".",rownames(hs2.data))
rownames(hs3.data)=gsub("_",".",rownames(hs3.data))
rownames(hs4.data)=gsub("_",".",rownames(hs4.data))
#rename cells
colnames(x=hs1.data) <- paste('hs1',colnames(x=hs1.data),sep="_")
colnames(x=hs2.data) <- paste('hs2',colnames(x=hs2.data),sep="_")
colnames(x=hs3.data) <- paste('hs3',colnames(x=hs3.data),sep="_")
colnames(x=hs4.data) <- paste('hs4',colnames(x=hs4.data),sep="_")
colnames(x=ms1.data) <- paste('ms1',colnames(x=ms1.data),sep="_")
colnames(x=ms2.data) <- paste('ms2',colnames(x=ms2.data),sep="_")
colnames(x=ms3.data) <- paste('ms3',colnames(x=ms3.data),sep="_")
colnames(x=ms4.data) <- paste('ms4',colnames(x=ms4.data),sep="_")
#create objects
hs1=CreateSeuratObject(counts=hs1.data,project="MG",min.cells=5)
hs2=CreateSeuratObject(counts=hs2.data,project="MG",min.cells=5)
hs3=CreateSeuratObject(counts=hs3.data,project="MG",min.cells=5)
hs4=CreateSeuratObject(counts=hs4.data,project="MG",min.cells=5)
ms1=CreateSeuratObject(counts=ms1.data,project="MG",min.cells=5)
ms2=CreateSeuratObject(counts=ms2.data,project="MG",min.cells=5)
ms3=CreateSeuratObject(counts=ms3.data,project="MG",min.cells=5)
ms4=CreateSeuratObject(counts=ms4.data,project="MG",min.cells=5)
#Follow https://satijalab.org/seurat/essential_commands.html
hg=merge(x=hs1,y=c(hs2,hs3,hs4),project="Hg")
mg=merge(x=ms1,y=c(ms2,ms3,ms4),project="Mg")
#at this point we don't need all the original sample objects--can re-create if needed
rm(hs1,hs2,hs3,hs4,hs1.data,hs2.data,hs3.data,hs4.data)
rm(ms1,ms2,ms3,ms4,ms1.data,ms2.data,ms3.data,ms4.data)
#summary of each object
print(hg)
## An object of class Seurat
## 10930 features across 1683 samples within 1 assay
## Active assay: RNA (10930 features)
print(mg)
## An object of class Seurat
## 17264 features across 28218 samples within 1 assay
## Active assay: RNA (17264 features)
Output raw data to data frame. Use conversion table (geneTrans) to translate human symbols to mouse symbols.
#load gene translation table
geneTrans=read.table("geneTrans.txt",sep=",",header=T,stringsAsFactors = F,row.names = 1)
mito.m=grep("^mt",rownames(mg),value=T)
mito.h=grep("^MT-",rownames(hg),value=T)
#turns out, these two vectors (n=13 each) are ordered and match, build an extended translation table
mitoTrans=data.frame(row.names = paste("mm10",mito.m,sep="_"),
Human.Symbol = mito.h,
Homologene_ID = rep(NA,13),
None = rep("yes",13),
Mouse.Symbol = mito.m,
hg19 = paste("hg19",mito.h,sep="_"),
mm10 = paste("mm10",mito.m,sep="_")
)
#extended translation table
xTrans = rbind(geneTrans,mitoTrans)
#extract human raw counts into table
hg.raw=GetAssayData(hg,slot="counts")
#subset rows in geneTrans (not necessary but simpler)
hg.raw=hg.raw[row.names(hg.raw) %in% xTrans$Human.Symbol,] #cut from 13283 to 11364 rows
#translate human symbols to mouse
hg.trans=merge(x=hg.raw,y=xTrans[,c(1,4)],by.x=0,by.y="Human.Symbol",all.x=T)
rownames(hg.trans)=hg.trans$Mouse.Symbol
hg.trans=hg.trans[,!(names(hg.trans) %in% c("Row.names","Mouse.Symbol"))]
#convert matrix back into Seurat object
hm=CreateSeuratObject(hg.trans,project="MG",min.cells=5)
#merge with mouse
hm=merge(x=hm,y=mg,project="HM")
#clean up objects no longer needed
rm(hg,mg,hg.raw,hg.trans,mito.m,mito.h)
#summarize merged object
print(hm)
## An object of class Seurat
## 17463 features across 29901 samples within 1 assay
## Active assay: RNA (17463 features)
Use standard workflow to calculate percent.mito (now all mouse symbols) and visualize by sample.
#filter and normalize merged object
mito.features=grep(pattern="^mt",x=rownames(x=hm),value=T)
percent.mito=Matrix::colSums(x=GetAssayData(object=hm,slot="counts")[mito.features,]) / Matrix::colSums(x=GetAssayData(object=hm,slot='counts'))
hm[['percent.mito']] = percent.mito
VlnPlot(object=hm,features=c("nFeature_RNA","nCount_RNA","percent.mito"),ncol=3)
FeatureScatter(object=hm,feature1 = "nCount_RNA",feature2 = "percent.mito")
FeatureScatter(object=hm,feature1 = "nCount_RNA",feature2 = "nFeature_RNA")
Print summary data before and after subsetting. Then normalize, find variable genes, and scale.
print(hm)
## An object of class Seurat
## 17463 features across 29901 samples within 1 assay
## Active assay: RNA (17463 features)
hm=subset(hm,nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mito < 0.05) #try > 100 & < 2500 & < .5
print(hm)
## An object of class Seurat
## 17463 features across 9379 samples within 1 assay
## Active assay: RNA (17463 features)
hm=NormalizeData(hm,normalization.method = "LogNormalize",scale.factor=1e4)
hm=FindVariableFeatures(hm,selection.method = 'mean.var.plot',mean.cutoff = c(0.0125,3),dispersion.cutoff = c(0.5,Inf)) #finds 4047 features
length(VariableFeatures(hm))
## [1] 2352
hm=ScaleData(hm,features=rownames(hm),vars.to.regress = c("nCount_RNA","percent.mito")) #this takes a while
## Regressing out nCount_RNA, percent.mito
## Scaling data matrix
Start with PCA and determine how many dimensions are informative.
hm=RunPCA(hm,features=VariableFeatures(hm),verbose=T)
## PC_ 1
## Positive: C1qb, C1qa, C1qc, B2m, Cx3cr1, Cd74, Fcer1g, Rpl13a, Lst1, Gpr34
## Trem2, Spp1, Sat1, Uba52, Apoc1, Cybb, Alox5ap, H2-Ea-ps, Rpl29, Ctss
## Gpx1, Ptprc, Maf, C3, Fos, Fcgr4, P2ry12, P2ry13, Olfml3, Cd84
## Negative: Gria2, Meg3, Ptn, Tsc22d1, Spock2, Pcp4l1, Ahi1, Slco1a4, Nrxn3, Meis2
## Epha5, Ly6c1, Flt1, Syt1, Cldn5, Snap25, Itm2a, Ly6a, Grin2b, Igfbp7
## Scg5, Stmn3, Id1, Il1rapl1, Snhg11, Celf4, Ndrg4, Sorbs2, Id3, Igf1r
## PC_ 2
## Positive: Flt1, Ly6c1, Slco1a4, Ly6a, Cldn5, Itm2a, Igfbp7, Ptprb, Id1, Pglyrp1
## Abcb1a, Egfl7, Klf2, Ctla2a, Cxcl12, Adgrf5, Slc2a1, Fn1, Ramp2, Sox18
## Ahnak, Adgrl4, Ablim1, Sgms1, Ly6e, Epas1, Spock2, Jcad, Esam, Pltp
## Negative: Gria2, Meg3, Meis2, Syt1, Nrxn3, Atp1b1, Il1rapl1, Epha5, Grin2b, Celf4
## Ahi1, Snap25, Stmn3, Scg5, Ndrg4, Negr1, Rtn1, Snhg11, Plppr4, Arpp21
## Ncam1, Bex2, Gad1, Ank3, Synpr, Peg3, Opcml, Pcsk2, Eml5, Grm5
## PC_ 3
## Positive: Atp1a2, Plpp3, Gja1, Slc1a2, Prdx6, Clu, Mt2, Ptprz1, Ptn, Mt3
## Cxcl14, Rorb, Fxyd1, Slc7a10, Gjb6, Tril, Aqp4, Hes5, Slc6a11, Pla2g7
## Msmo1, Vegfa, Fjx1, Car2, Mlc1, Phkg1, Etnppl, Sfxn5, Fabp7, Itih3
## Negative: Syt1, Snap25, Meg3, Ndrg4, Celf4, Gad1, Snhg11, Camk2b, Atp2b1, Rpl13a
## Synpr, Atp1a3, Plppr4, Nrip3, Stmn3, Ano3, Grin2b, Pcp4l1, Snca, Gad2
## Cd74, Bcl11a, C1qtnf4, Tpm1, Eml5, Ccsap, Gpx1, Syt6, Myt1l, Pcp4
## PC_ 4
## Positive: Spp1, Cd74, H2-Ea-ps, C3, Apoc1, Cybb, A2m, Neat1, Tpm1, S100a11
## Fcgr4, Ifi203, Arl5a, H2-DMb1, Olr1, Rpl29, H2-Eb1, 1500009L16Rik, H2-Bl, Folr2
## Sorl1, Lilrb4a, Glipr1, Rpl13a, Adam28, Fcgrt, Uba52, Atm, Clec7a, Tgoln2
## Negative: Hexb, Ctss, Fyb, Ctsd, Siglech, Rnase4, Vsir, Lgmn, Tmem119, Cd52
## Fcgr3, Selplg, Cd300c2, Ctsz, Cx3cr1, C1qa, Mafb, C1qc, Unc93b1, P2ry12
## Ptpn18, Tgfbr1, Arsb, Ly6e, Ighm, Lyz2, Fcer1g, Rhoh, Ssh2, C1qb
## PC_ 5
## Positive: Gja1, Mt3, Atp1a2, Mt2, Slc1a2, Clu, Plpp3, Prdx6, Cxcl14, Ptprz1
## Gria2, Rorb, Pla2g7, Slc7a10, Gjb6, Aqp4, Slc6a11, Fxyd1, Tril, Fjx1
## Hes5, Mlc1, Phkg1, Etnppl, Vegfa, Sfxn5, Itih3, Mgst1, Ednrb, Dkk3
## Negative: Cldn11, Ermn, Tspan2, Mog, Tubb4a, Mag, Ugt8a, Ppp1r14a, Tmem88b, Mal
## Opalin, Cnp, Nkx6-2, Stmn4, Qdpr, Mobp, Kctd13, Cryab, C030029H02Rik, Grb14
## Gjc3, Ttll7, Hapln2, Anln, Sept4, Enpp2, Slc24a2, Dixdc1, Kcna1, Edil3
print(hm[['pca']],dims=1:5,nfeatures=5,projected=F)
## PC_ 1
## Positive: C1qb, C1qa, C1qc, B2m, Cx3cr1
## Negative: Gria2, Meg3, Ptn, Tsc22d1, Spock2
## PC_ 2
## Positive: Flt1, Ly6c1, Slco1a4, Ly6a, Cldn5
## Negative: Gria2, Meg3, Meis2, Syt1, Nrxn3
## PC_ 3
## Positive: Atp1a2, Plpp3, Gja1, Slc1a2, Prdx6
## Negative: Syt1, Snap25, Meg3, Ndrg4, Celf4
## PC_ 4
## Positive: Spp1, Cd74, H2-Ea-ps, C3, Apoc1
## Negative: Hexb, Ctss, Fyb, Ctsd, Siglech
## PC_ 5
## Positive: Gja1, Mt3, Atp1a2, Mt2, Slc1a2
## Negative: Cldn11, Ermn, Tspan2, Mog, Tubb4a
VizDimLoadings(hm,dims=1:2)
DimPlot(hm)
hm=ProjectDim(hm)
## PC_ 1
## Positive: Tyrobp, C1qb, C1qa, C1qc, Aif1, B2m, Cx3cr1, Laptm5, Cd74, Fcer1g
## Rpl13a, Lst1, Ftl1, Gpr34, Cyba, Trem2, Csf1r, Spp1, Sat1, Uba52
## Negative: Gria2, Meg3, Sptbn1, Ptn, Tsc22d1, Selenow, Tcf4, Zbtb20, mt-Atp6, Bsg
## Pcsk1n, Spock2, Mt1, Pbx1, Nfib, Selenom, Pcp4l1, Atp5j, Ahi1, Slco1a4
## PC_ 2
## Positive: Flt1, Ly6c1, Slco1a4, Ly6a, Cldn5, Itm2a, Igfbp7, Ptprb, Id1, Pglyrp1
## Abcb1a, Egfl7, Klf2, Ctla2a, Cxcl12, Adgrf5, Bsg, Slc2a1, Fn1, Ramp2
## Negative: Gria2, Meg3, Meis2, Ckb, Syt1, Dclk1, Nrxn3, Atp1b1, Pcsk1n, Il1rapl1
## Epha5, Ank2, Grin2b, Celf4, Celf2, Dlgap1, Ahi1, Snap25, Nrxn1, Stmn3
## PC_ 3
## Positive: Atp1a2, Plpp3, Aldoc, Gja1, Slc1a2, Prdx6, Ntsr2, Slc1a3, Mt1, Clu
## Gpr37l1, Mt2, Mfge8, Ptprz1, Sparcl1, Atp1b2, Ptn, Glul, F3, Id4
## Negative: Syt1, Mef2c, Snap25, Meg3, Ndrg4, Celf4, Gad1, Calm2, Snhg11, Tmsb4x
## Tmsb10, Camk2b, Atp2b1, Rpl13a, Rps19, Synpr, Atp1a3, Plppr4, Nrip3, Stmn3
## PC_ 4
## Positive: Spp1, Cd74, H2-Ea-ps, C3, Apoc1, Cybb, A2m, Neat1, Tpm1, S100a11
## Fcgr4, Ifi203, Arl5a, H2-DMb1, Olr1, Rpl29, H2-Eb1, 1500009L16Rik, H2-Bl, Folr2
## Negative: Hexb, Ctss, Fyb, Ctsd, Siglech, Rnase4, Vsir, Lgmn, Tmem119, Cd52
## Fcgr3, Selplg, Cd300c2, Rpl17, Rps17, Ctsz, Serinc3, Cx3cr1, Csf1r, C1qa
## PC_ 5
## Positive: Gja1, Mt3, Atp1a2, Mt2, Slc1a2, Aldoc, Sparcl1, Clu, Ntsr2, Plpp3
## S1pr1, Slc1a3, Atp1b2, Prdx6, Cxcl14, Id4, Cst3, Dclk1, Gm3764, Mfge8
## Negative: Cldn11, Ermn, Tspan2, Mog, Tubb4a, Mag, Ugt8a, Plp1, Ppp1r14a, Tmem88b
## Mal, Opalin, Cnp, Nkx6-2, Stmn4, Qdpr, Mobp, Kctd13, Cryab, C030029H02Rik
DimHeatmap(hm,dims=1,cells=500,balanced=T)
DimHeatmap(hm,dims=1:6,cells=500,balanced=T)
hm=JackStraw(hm,num.replicate=100)
hm=ScoreJackStraw(hm,dims=1:20)
JackStrawPlot(hm,dims=1:20)
## Warning: Removed 32929 rows containing missing values (geom_point).
ElbowPlot(hm)
#start clustering
hm=FindNeighbors(hm,dims=1:13) #adjust dims based on plots
## Computing nearest neighbor graph
## Computing SNN
hm=FindClusters(hm,resolution=0.2)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 9379
## Number of edges: 324905
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9685
## Number of communities: 12
## Elapsed time: 1 seconds
table(Idents(hm))
##
## 0 1 2 3 4 5 6 7 8 9 10 11
## 2304 1617 1333 1115 1028 521 505 387 281 217 48 23
hm=RunTSNE(hm,dims=1:13)
DimPlot(hm,reduction='tsne')
DimPlot(hm,reduction='tsne',split.by='orig.ident')
FeaturePlot(hm,features='Spp1')
FeaturePlot(hm,features='Hexb')
FeaturePlot(hm,features='nCount_RNA')
hm=RunUMAP(hm,dims = 1:13)
DimPlot(hm,reduction='umap')
FeaturePlot(hm,features='Spp1')
FeaturePlot(hm,features='Hexb')
#FeaturePlot(hm,features='nCount_RNA',split.by='orig.ident')
FeaturePlot(hm,features='nCount_RNA')
Use top 2 genes from prior clustering to do this, following
hm.markers=FindAllMarkers(hm,only.pos=T,min.pct = .25,logfc.threshold = .25)
## Calculating cluster 0
## Calculating cluster 1
## Calculating cluster 2
## Calculating cluster 3
## Calculating cluster 4
## Calculating cluster 5
## Calculating cluster 6
## Calculating cluster 7
## Calculating cluster 8
## Calculating cluster 9
## Calculating cluster 10
## Calculating cluster 11
hm.markers %>% group_by(cluster) %>% top_n(10,avg_logFC)
## # A tibble: 120 x 7
## # Groups: cluster [12]
## p_val avg_logFC pct.1 pct.2 p_val_adj cluster gene
## <dbl> <dbl> <dbl> <dbl> <dbl> <fct> <chr>
## 1 0 2.66 0.987 0.238 0 0 Slc1a2
## 2 0 2.49 0.947 0.14 0 0 Aldoc
## 3 0 2.37 0.973 0.269 0 0 Mt2
## 4 0 2.37 0.939 0.129 0 0 Plpp3
## 5 0 2.34 0.887 0.11 0 0 Clu
## 6 0 2.31 0.987 0.327 0 0 Mt3
## 7 0 2.29 0.935 0.107 0 0 Gja1
## 8 0 2.28 0.85 0.071 0 0 Ntsr2
## 9 0 2.25 0.996 0.537 0 0 Mt1
## 10 0 2.18 0.974 0.287 0 0 Slc1a3
## # … with 110 more rows
hm.markers %>% group_by(cluster) %>% top_n(5,avg_logFC) %>% write.csv("Top 5 per cluster.csv",row.names = F)
hm.markers %>% group_by(cluster) %>% top_n(5,avg_logFC) %>% as.data.frame %>% paged_table
Use Spp1 and Hexb to identify cluster number for human and mouse microglia, respectively.
humClus=as.character(subset(hm.markers,gene=="Spp1")$cluster)
print(humClus)
## [1] "2"
musClus=as.character(subset(hm.markers,gene=="Hexb")$cluster)
print(musClus)
## [1] "1" "10"
diffGenes=FindMarkers(hm,ident.1=humClus,ident.2=musClus,min.pct=0.1)
table(sig=diffGenes$p_val_adj <= 0.05, twofold=abs(diffGenes$avg_logFC) >= 1)
## twofold
## sig FALSE TRUE
## FALSE 17 0
## TRUE 1477 234
diffGenes %>% tibble::rownames_to_column() %>% filter(p_val_adj <= 0.05) %>% filter(abs(avg_logFC) >= 1) %>% paged_table
saveRDS(diffGenes,"by_id_diffGenes.rds")
write.table(as.data.frame(diffGenes),"by_id_diffGenes.csv.txt",sep=",",quote=T)
hm.mean=AverageExpression(hm)
## Finished averaging RNA for cluster 0
## Finished averaging RNA for cluster 1
## Finished averaging RNA for cluster 2
## Finished averaging RNA for cluster 3
## Finished averaging RNA for cluster 4
## Finished averaging RNA for cluster 5
## Finished averaging RNA for cluster 6
## Finished averaging RNA for cluster 7
## Finished averaging RNA for cluster 8
## Finished averaging RNA for cluster 9
## Finished averaging RNA for cluster 10
## Finished averaging RNA for cluster 11
head(hm.mean$RNA)
## 0 1 2 3 4 5
## A1bg 0.00000000 0.000000000 0.65370983 0.000000000 0.00000000 0.00000000
## A2m 0.11341421 0.004938308 5.84050665 0.005034731 0.02260603 0.02899343
## Aaas 0.02782129 0.049228741 0.09346864 0.086099051 0.01357181 0.08190117
## Aacs 0.20132616 0.043160956 0.04395210 0.040681583 0.03982086 0.04111436
## Aagab 0.10360258 0.283746760 0.06036875 0.111792013 0.11111067 0.11410296
## Aak1 0.55156482 0.286330575 2.21098187 0.490460422 1.33206419 0.34388873
## 6 7 8 9 10 11
## A1bg 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000
## A2m 0.01055543 0.29422081 0.03357282 0.03043788 0.06093400 0.0000000
## Aaas 0.04382516 0.09215834 0.05714475 0.03591812 0.08015904 0.0000000
## Aacs 0.04784475 0.01470232 0.00000000 0.13406302 0.00000000 0.3931127
## Aagab 0.09831027 0.12134816 0.03046373 0.04606692 0.00000000 0.0000000
## Aak1 0.76069546 0.41094990 0.40937407 0.66905585 0.77272484 0.1024706
write.csv(hm.mean$RNA,"hm cluster averages.csv.txt")
#stash idents
hm[["old.ident"]]=Idents(hm)
#get vector of cell idents
all.cells=Cells(hm)
#split by species
hg.cells=grep("^h",all.cells,value=T)
mm.cells=grep("^m",all.cells,value=T)
#apply new idents
Idents(hm,cells=hg.cells)="Human"
Idents(hm,cells=mm.cells)="Mouse"
table(hm$orig.ident,Idents(hm))
##
## Mouse Human
## hs1 0 317
## hs2 0 232
## hs3 0 510
## hs4 0 307
## ms1 1809 0
## ms2 793 0
## ms3 3342 0
## ms4 2069 0
DimPlot(hm,label=T,repel=T,label.size=8,reduction = "tsne")+NoLegend()
FeaturePlot(hm,features='nCount_RNA',reduction = "tsne")
FeaturePlot(hm,features='nCount_RNA',reduction = "tsne",split.by="ident")
sessionInfo()
## R version 3.5.3 (2019-03-11)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.2 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3
## LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] rmarkdown_1.12 dplyr_0.8.0.1 Seurat_3.0.0.9000
##
## loaded via a namespace (and not attached):
## [1] nlme_3.1-137 tsne_0.1-3 bitops_1.0-6
## [4] RColorBrewer_1.1-2 httr_1.4.0 tools_3.5.3
## [7] utf8_1.1.4 R6_2.4.0 irlba_2.3.3
## [10] KernSmooth_2.23-15 lazyeval_0.2.2 colorspace_1.4-1
## [13] npsurv_0.4-0 withr_2.1.2 tidyselect_0.2.5
## [16] compiler_3.5.3 cli_1.1.0 plotly_4.9.0
## [19] labeling_0.3 caTools_1.17.1.2 scales_1.0.0
## [22] lmtest_0.9-36 ggridges_0.5.1 pbapply_1.4-0
## [25] stringr_1.4.0 digest_0.6.18 R.utils_2.8.0
## [28] pkgconfig_2.0.2 htmltools_0.3.6 bibtex_0.4.2
## [31] htmlwidgets_1.3 rlang_0.3.4 zoo_1.8-5
## [34] jsonlite_1.6 ica_1.0-2 gtools_3.8.1
## [37] R.oo_1.22.0 magrittr_1.5 Matrix_1.2-17
## [40] Rcpp_1.0.1 munsell_0.5.0 fansi_0.4.0
## [43] ape_5.3 reticulate_1.12 R.methodsS3_1.7.1
## [46] stringi_1.4.3 yaml_2.2.0 gbRd_0.4-11
## [49] MASS_7.3-51.1 gplots_3.0.1.1 Rtsne_0.15
## [52] plyr_1.8.4 grid_3.5.3 parallel_3.5.3
## [55] gdata_2.18.0 listenv_0.7.0 ggrepel_0.8.0
## [58] crayon_1.3.4 lattice_0.20-38 cowplot_0.9.4
## [61] splines_3.5.3 SDMTools_1.1-221 knitr_1.22
## [64] pillar_1.3.1 igraph_1.2.4 future.apply_1.2.0
## [67] codetools_0.2-16 glue_1.3.1 evaluate_0.13
## [70] lsei_1.2-0 metap_1.1 data.table_1.12.2
## [73] png_0.1-7 Rdpack_0.11-0 gtable_0.3.0
## [76] RANN_2.6.1 purrr_0.3.2 tidyr_0.8.3
## [79] future_1.12.0 assertthat_0.2.1 ggplot2_3.1.1
## [82] xfun_0.6 rsvd_1.0.0 survival_2.43-3
## [85] viridisLite_0.3.0 tibble_2.1.1 cluster_2.0.8
## [88] globals_0.12.4 fitdistrplus_1.0-14 ROCR_1.0-7